/**
 * 角色管理页面的JavaScript功能
 */

// 在页面加载完成后执行
$(document).ready(function() {
    // 定义分页变量
    var currentPage = 1;
    var pageSize = 10;
    var totalPages = 1;

    // 页面加载时调用API获取角色列表
    loadRoleData(currentPage, pageSize);

    // 加载角色数据的函数
    function loadRoleData(page, size, searchParams) {
        // 构建请求参数
        var requestData = {
            pageNum: page,
            pageSize: size
        };

        // 如果有搜索参数，合并到请求数据中
        if (searchParams) {
            var searchObj = {};
            var params = searchParams.split('&');
            for (var i = 0; i < params.length; i++) {
                var pair = params[i].split('=');
                if (pair[0] && pair[1]) {
                    searchObj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
                }
            }
            $.extend(requestData, searchObj);
        }

        // 添加调试信息
        console.log('发送请求参数:', requestData);

        $.ajax({
            url: contextPath + '/API/role/list',
            type: 'GET',
            data: requestData,
            dataType: 'json',
            success: function(response) {
                // 将获取的数据输出到控制台
                console.log('角色列表数据:', response);

                if (response && response.rows) {
                    // 渲染角色数据到表格
                    renderRoleTable(response.rows);

                    // 更新分页信息
                    totalPages = Math.ceil(response.total / pageSize);
                    renderPagination(currentPage, totalPages);
                } else {
                    console.error('响应数据格式不正确:', response);
                    showResult('错误', '获取角色列表失败: 响应数据格式不正确', 'danger');
                    // 清空表格
                    renderRoleTable([]);
                }
            },
            error: function(xhr, status, error) {
                console.error('获取角色列表失败:', error);
                showResult('错误', '获取角色列表失败: ' + error, 'danger');
                // 清空表格
                renderRoleTable([]);
            }
        });
    }

    // 渲染角色表格的函数
    function renderRoleTable(roles) {
        var tableBody = $('#roleTable tbody');
        tableBody.empty(); // 清空现有表格内容
    
        // 将当前角色数据存到全局变量，便于事件中访问
        window._currentRoles = roles;
    
        if (roles.length === 0) {
            // 如果没有数据，显示一个提示行
            var emptyRow = '<tr><td colspan="5" class="text-center">暂无数据</td></tr>';
            tableBody.append(emptyRow);
            return;
        }
    
        // 遍历角色数据并添加到表格
        for(var i = 0; i < roles.length; i++) {
            var role = roles[i];
            
            var row = '<tr>' +
                '<td class="text-center"><input type="checkbox" class="form-check-input role-checkbox"></td>' +
                '<td class="text-center">' + role.role_id + '</td>' + // 修改这里，从 id 改为 role_id
                '<td class="text-center">' + role.role_name + '</td>' +
                '<td class="text-center">' + (role.description || '<span class="text-muted">无描述</span>') + '</td>' +
                '<td class="text-center">' +
                '<button class="btn btn-sm btn-primary edit-role-btn" data-index="' + i + '"><i class="bi bi-pencil"></i> 编辑</button> ' +
                '<button class="btn btn-sm btn-info view-permissions-btn" data-index="' + i + '"><i class="bi bi-eye"></i> 查看权限</button> ' +
                '<button class="btn btn-sm btn-danger delete-role-btn" data-index="' + i + '"><i class="bi bi-trash"></i> 删除</button>' +
                '</td>' +
                '</tr>';
    
            tableBody.append(row);
        }
        
        // 重置所有复选框为未选中
        $('#selectAllRoles').prop('checked', false);
        $('.role-checkbox').prop('checked', false);
    }

    // 渲染分页控件
    function renderPagination(currentPage, totalPages) {
        var paginationEl = $('#rolePagination');
        paginationEl.empty();

        // 上一页按钮
        var prevDisabled = currentPage === 1 ? 'disabled' : '';
        var prevItem = '<li class="page-item ' + prevDisabled + '">' +
            '<a class="page-link prev-page" href="javascript:void(0)" tabindex="-1">上一页</a></li>';
        paginationEl.append(prevItem);

        // 页码按钮
        var startPage = Math.max(1, currentPage - 2);
        var endPage = Math.min(totalPages, startPage + 4);

        if (endPage - startPage < 4 && totalPages > 5) {
            startPage = Math.max(1, endPage - 4);
        }

        for (var i = startPage; i <= endPage; i++) {
            var active = i === currentPage ? 'active' : '';
            var pageItem = '<li class="page-item ' + active + '">' +
                '<a class="page-link page-number" data-page="' + i + '" href="javascript:void(0)">' + i + '</a></li>';
            paginationEl.append(pageItem);
        }

        // 下一页按钮
        var nextDisabled = currentPage === totalPages || totalPages === 0 ? 'disabled' : '';
        var nextItem = '<li class="page-item ' + nextDisabled + '">' +
            '<a class="page-link next-page" href="javascript:void(0)">下一页</a></li>';
        paginationEl.append(nextItem);
    }

    // 绑定分页事件
    $(document).on('click', '.page-number', function() {
        currentPage = parseInt($(this).data('page'));
        // 获取当前搜索表单的值
        var searchParams = $('#searchRoleForm').serialize();
        loadRoleData(currentPage, pageSize, searchParams ? searchParams : null);
    });

    $(document).on('click', '.prev-page', function() {
        if (currentPage > 1) {
            currentPage--;
            // 获取当前搜索表单的值
            var searchParams = $('#searchRoleForm').serialize();
            loadRoleData(currentPage, pageSize, searchParams ? searchParams : null);
        }
    });

    $(document).on('click', '.next-page', function() {
        if (currentPage < totalPages) {
            currentPage++;
            // 获取当前搜索表单的值
            var searchParams = $('#searchRoleForm').serialize();
            loadRoleData(currentPage, pageSize, searchParams ? searchParams : null);
        }
    });

    // 搜索表单提交事件
    $('#searchRoleForm').on('submit', function(e) {
        e.preventDefault();
        
        // 获取表单数据
        var formData = $(this).serialize();
        
        // 重置当前页码为第1页
        currentPage = 1;
        
        // 发送AJAX请求
        loadRoleData(currentPage, pageSize, formData);
    });

    // 重置按钮事件
    $('button[type="reset"]').on('click', function() {
        setTimeout(function() {
            currentPage = 1;
            loadRoleData(currentPage, pageSize);
        }, 100);
    });

    // 全选功能
    $('#selectAllRoles').on('click', function() {
        var checked = $(this).prop('checked');
        $('.role-checkbox').prop('checked', checked);
    });

    // 显示结果消息的函数
    function showResult(title, message, type) {
        $('#resultModalTitle').text(title);
        $('#resultModalBody').html('<div class="alert alert-' + type + '">' + message + '</div>');
        var resultModal = new bootstrap.Modal(document.getElementById('resultModal'));
        resultModal.show();
    }

    // 添加角色按钮点击事件 - 删除这个重复的事件绑定
    /* $('#addRoleBtn').on('click', function() {
        // 清空表单
        $('#roleForm')[0].reset();
        $('#roleId').val('');
        $('#roleModalTitle').text('添加角色');
        
        // 显示模态框
        var modal = new bootstrap.Modal(document.getElementById('roleModal'));
        modal.show();
    }); */

    // 编辑角色按钮点击事件
    $(document).on('click', '.edit-role-btn', function() {
        var index = $(this).data('index');
        if(window._currentRoles && typeof index !== 'undefined') {
            var role = window._currentRoles[index];
            
            // 填充编辑模态框内容
            $('#roleId').val(role.role_id);
            $('#roleName').val(role.role_name);
            $('#roleDescription').val(role.description || '');
            
            // 设置状态 - 移除状态相关代码
            /* if(role.status === 0) {
                $('#roleStatusInactive').prop('checked', true);
            } else {
                $('#roleStatusActive').prop('checked', true);
            } */
            
            $('#roleModalTitle').text('编辑角色');
            
            // 加载角色权限
            loadRolePermissions(role.role_id, false); // 传递false表示编辑模式
            
            // 显示编辑模态框
            var modal = new bootstrap.Modal(document.getElementById('roleModal'));
            modal.show();
        }
    });

    // 查看权限按钮点击事件
    $(document).on('click', '.view-permissions-btn', function() {
        var index = $(this).data('index');
        if(window._currentRoles && typeof index !== 'undefined') {
            var role = window._currentRoles[index];
            
            // 设置模态框标题
            $('#roleModalTitle').text('查看角色权限: ' + role.role_name);
            
            // 隐藏不需要的表单字段，只显示权限部分
            $('#roleForm .mb-3').not(':last').hide();
            
            // 加载角色权限
            loadRolePermissions(role.role_id, true); // 传递true表示只读模式
            
            // 显示模态框
            var modal = new bootstrap.Modal(document.getElementById('roleModal'));
            modal.show();
            
            // 隐藏保存按钮，只显示取消按钮
            $('#saveRoleBtn').hide();
        }
    });

    // 模态框关闭事件，重置表单显示状态
    $('#roleModal').on('hidden.bs.modal', function () {
        // 重置表单
        $('#roleForm')[0].reset();
        $('#roleId').val('');
        
        // 显示所有表单字段
        $('#roleForm .mb-3').show();
        
        // 显示保存按钮
        $('#saveRoleBtn').show();
        
        // 清空权限复选框
        $('#permissionCheckboxes').empty();
    });

    // 加载角色权限
    function loadRolePermissions(roleId, readOnly) {
        $.ajax({
            url: contextPath + '/API/role/permission',
            type: 'GET',
            data: { role_id: roleId },
            dataType: 'json',
            success: function(response) {
                if (response.code === 200) {
                    renderPermissionCheckboxes(response.data, readOnly);
                } else {
                    console.error('获取角色权限失败:', response.message);
                    showResult('错误', '获取角色权限失败: ' + response.message, 'danger');
                }
            },
            error: function(xhr, status, error) {
                console.error('获取角色权限失败:', error);
                showResult('错误', '获取角色权限失败: ' + error, 'danger');
            }
        });
    }

    // 渲染权限复选框
    function renderPermissionCheckboxes(permissions, readOnly) {
        var permissionCheckboxes = $('#permissionCheckboxes');
        permissionCheckboxes.empty();
        
        if (permissions.length === 0) {
            permissionCheckboxes.append('<div class="text-center text-muted">暂无权限数据</div>');
            return;
        }
        
        // 遍历权限数据并创建复选框
        $.each(permissions, function(index, permission) {
            var checkboxId = 'permission_' + permission.permission_id;
            var checked = permission.has_permission ? 'checked' : '';
            var disabled = readOnly ? 'disabled' : ''; // 如果是只读模式，添加disabled属性
            
            var checkboxHtml = 
                '<div class="form-check">' +
                '<input class="form-check-input permission-checkbox" type="checkbox" ' +
                'id="' + checkboxId + '" ' +
                'name="permissions[]" ' +
                'value="' + permission.permission_id + '" ' +
                checked + ' ' + disabled + '>' +
                '<label class="form-check-label" for="' + checkboxId + '">' +
                permission.permission_name + 
                (permission.description ? ' - ' + permission.description : '') +
                '</label>' +
                '</div>';
            
            permissionCheckboxes.append(checkboxHtml);
        });
    }

    // 保存角色按钮点击事件
    $('#saveRoleBtn').on('click', function() {
        // 获取表单数据
        var roleId = $('#roleId').val();
        var roleName = $('#roleName').val();
        var roleDescription = $('#roleDescription').val();
        
        // 获取选中的权限ID
        var permissionIds = [];
        $('.permission-checkbox:checked').each(function() {
            permissionIds.push(parseInt($(this).val())); // 确保转换为整数
        });
        
        // 验证角色名称
        if (!roleName || roleName.trim() === '') {
            showResult('错误', '角色名称不能为空', 'danger');
            return;
        }
        
        // 如果没有角色ID，说明是新增角色
        if (!roleId) {
            // 构建新增角色的请求数据
            var roleData = {
                role_name: roleName,
                description: roleDescription
            };
            
            console.log('发送新增角色请求数据:', JSON.stringify(roleData));
            
            // 调用添加角色接口
            $.ajax({
                url: contextPath + '/API/role/add',
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify(roleData),
                dataType: 'json',
                success: function(response) {
                    console.log('新增角色响应:', response);
                    if (response.code === 200) {
                        // 获取新角色ID
                        var newRoleId = response.data.role_id;
                        
                        // 如果有选择权限，则更新角色权限
                        if (permissionIds.length > 0) {
                            updateRolePermissions(newRoleId, permissionIds);
                        } else {
                            showResult('成功', '角色添加成功', 'success');
                            // 刷新角色列表
                            loadRoleData(currentPage, pageSize);
                            // 关闭模态框
                            var modal = bootstrap.Modal.getInstance(document.getElementById('roleModal'));
                            modal.hide();
                        }
                    } else {
                        console.error('添加角色失败:', response.message);
                        showResult('错误', '添加角色失败: ' + response.message, 'danger');
                    }
                },
                error: function(xhr, status, error) {
                    console.error('添加角色失败:', error);
                    showResult('错误', '添加角色失败: ' + error, 'danger');
                }
            });
        } else {
            // 如果有角色ID，说明是更新角色权限
            // 构建请求数据
            var requestData = {
                role_id: parseInt(roleId), // 确保转换为整数
                permission_ids: permissionIds
            };
            
            console.log('发送权限更新请求数据:', JSON.stringify(requestData));
            
            // 直接调用RolePermissionServlet的POST方法更新角色权限
            $.ajax({
                url: contextPath + '/API/role/permission',
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify(requestData),
                dataType: 'json',
                success: function(response) {
                    console.log('权限更新响应:', response);
                    if (response.code === 200) {
                        showResult('成功', '角色权限更新成功', 'success');
                        // 刷新角色列表
                        loadRoleData(currentPage, pageSize);
                        // 关闭模态框
                        var modal = bootstrap.Modal.getInstance(document.getElementById('roleModal'));
                        modal.hide();
                    } else {
                        console.error('更新角色权限失败:', response.message);
                        showResult('错误', '更新角色权限失败: ' + response.message, 'danger');
                    }
                },
                error: function(xhr, status, error) {
                    console.error('更新角色权限失败:', error);
                    showResult('错误', '更新角色权限失败: ' + error, 'danger');
                }
            });
        }
    });
    
    // 更新角色权限的函数
    function updateRolePermissions(roleId, permissionIds) {
        // 构建请求数据
        var requestData = {
            role_id: roleId,
            permission_ids: permissionIds
        };
        
        // 直接调用RolePermissionServlet的POST方法
        $.ajax({
            url: contextPath + '/API/role/permission',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify(requestData),
            dataType: 'json',
            success: function(response) {
                if (response.code === 200) {
                    showResult('成功', '角色权限更新成功', 'success');
                    // 刷新角色列表
                    loadRoleData(currentPage, pageSize);
                    // 关闭模态框
                    var modal = bootstrap.Modal.getInstance(document.getElementById('roleModal'));
                    modal.hide();
                } else {
                    console.error('更新角色权限失败:', response.message);
                    showResult('错误', '更新角色权限失败: ' + response.message, 'danger');
                }
            },
            error: function(xhr, status, error) {
                console.error('更新角色权限失败:', error);
                showResult('错误', '更新角色权限失败: ' + error, 'danger');
            }
        });
    }

    // 添加角色按钮点击事件
    $('#addRoleBtn').on('click', function() {
        // 重置表单
        $('#roleForm')[0].reset();
        $('#roleId').val('');
        
        // 设置模态框标题
        $('#roleModalTitle').text('添加角色');
        
        // 加载所有权限（默认全部未选中）
        loadAllPermissions();
        
        // 显示模态框
        var modal = new bootstrap.Modal(document.getElementById('roleModal'));
        modal.show();
    });

    // 加载所有权限
    function loadAllPermissions() {
        $.ajax({
            url: contextPath + '/API/role/add',
            type: 'GET',
            dataType: 'json',
            success: function(response) {
                if (response.code === 200) {
                    var permissions = response.data.map(function(permission) {
                        return {
                            permission_id: permission.permission_id,
                            permission_name: permission.permission_name,
                            description: permission.description,
                            has_permission: false
                        };
                    });
                    renderPermissionCheckboxes(permissions);
                } else {
                    console.error('获取权限列表失败:', response.message);
                    showResult('错误', '获取权限列表失败: ' + response.message, 'danger');
                }
            },
            error: function(xhr, status, error) {
                console.error('获取权限列表失败:', error);
                showResult('错误', '获取权限列表失败: ' + error, 'danger');
            }
        });
    }

    // 显示结果消息的函数
    function showResult(title, message, type) {
        $('#resultModalTitle').text(title);
        $('#resultModalBody').html('<div class="alert alert-' + type + '">' + message + '</div>');
        var resultModal = new bootstrap.Modal(document.getElementById('resultModal'));
        resultModal.show();
    }

    // 批量删除按钮点击事件
    $('#batchDeleteRoleBtn').on('click', function() {
        var checkedBoxes = $('.role-checkbox:checked');
        if(checkedBoxes.length === 0) {
            showResult('提示', '请先选择要删除的角色', 'warning');
            return;
        }
        
        // 获取选中的角色ID
        var roleIds = [];
        checkedBoxes.each(function() {
            var index = $(this).closest('tr').index();
            if(window._currentRoles && window._currentRoles[index]) {
                roleIds.push(window._currentRoles[index].role_id);
            }
        });
        
        // 确认删除
        if(confirm('确定要删除选中的 ' + checkedBoxes.length + ' 个角色吗？')) {
            // 发送批量删除请求
            $.ajax({
                url: contextPath + '/API/role/batchDelete',
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify({ role_ids: roleIds }),
                dataType: 'json',
                success: function(response) {
                    if (response.code === 200) {
                        showResult('成功', '批量删除成功', 'success');
                        // 刷新角色列表
                        loadRoleData(currentPage, pageSize);
                    } else {
                        showResult('错误', response.message, 'danger');
                    }
                },
                error: function(xhr, status, error) {
                    console.error('批量删除失败:', error);
                    showResult('错误', '批量删除失败: ' + error, 'danger');
                }
            });
        }
    });

    // 删除角色按钮点击事件
    $(document).on('click', '.delete-role-btn', function() {
        var index = $(this).data('index');
        if(window._currentRoles && typeof index !== 'undefined') {
            var role = window._currentRoles[index];
            
            // 使用 Bootstrap 的确认对话框
            if(confirm('确定要删除角色 "' + role.role_name + '" 吗？此操作不可恢复。')) {
                // 发送删除请求
                $.ajax({
                    url: contextPath + '/API/role/permission?role_id=' + role.role_id,
                    type: 'DELETE',
                    dataType: 'json',
                    success: function(response) {
                        if(response.code === 200) {
                            // 删除成功
                            showResult('成功', '角色删除成功', 'success');
                            // 重新加载角色列表
                            loadRoleData(currentPage, pageSize);
                        } else {
                            // 删除失败
                            showResult('错误', '删除角色失败: ' + response.message, 'danger');
                        }
                    },
                    error: function(xhr, status, error) {
                        console.error('删除角色失败:', error);
                        showResult('错误', '删除角色失败: ' + error, 'danger');
                    }
                });
            }
        }
    }); // 这里添加了缺失的闭合括号

}); // 这是 document.ready 的闭合括号